package com.mofei.mall04_fileupload.controller.upload;

import java.io.File;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

/**
 * Created by Administrator on 2017/10/23 0023.
 */
public enum FileType {
    OTHER("附件文件", "files");
    /**
     * 文件名末尾位数
     */
    private static final int CUTLENGTH = 6;
    /**
     * 文件系统路径
     */
    public static String filePath = null;

    /**
     * 说明
     */
    private String explain;

    /**
     * 子路径
     */
    private String path;

    public String getPath() {
        return path;
    }

    FileType(String explain, String path) {
        this.explain = explain;
        this.path = path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public String getExplain() {
        return explain;
    }

    public void setExplain(String explain) {
        this.explain = explain;
    }


    /**
     * 获取文件路径
     *
     * @param fileType 文件类型
     * @param size     文件数量
     * @return 绝对路径
     */
    public static String[] getPath(FileType fileType, int size, String type, String path) {
        String genderPath = genderPath(fileType);
        if (genderPath.equals("") || genderPath.equals("null\\files") || genderPath.equals("null/files")) {
            File file = new File(path);
            if (!file.exists()) {
                file.mkdirs();
            }
            genderPath = path + File.separator + "ATTACHMENT" + ((type.equals("")) ? "" : File.separator + type);
        }
        String[] listDir = new String[size];
        for (int i = 0; i < size; i++) {
            String finalDir = null;
            File baseFile = new File(genderPath);
            if (!baseFile.exists()) {
                boolean mkdirs = baseFile.mkdirs();
                if (!mkdirs) {
                    throw new RuntimeException("文件夹创建失败");
                }
            }
            String newDirName = getDirPath();
            baseFile = new File(baseFile.getPath(), newDirName);
            if (!baseFile.exists()) {
                boolean mkdirs = baseFile.mkdirs();
                if (!mkdirs) {
                    throw new RuntimeException("文件夹创建失败");
                }
            }
            finalDir = genderPath + File.separator + newDirName;
            listDir[i] = finalDir;
        }
        return listDir;
    }

    /**
     * 生产基本路径
     *
     * @param path 子路径
     * @return 路径地址
     */
    public static String genderPath(String path) {
        return filePath + File.separator + path;
    }

    /**
     * 生产基本路径
     *
     * @param fileType 子路径
     * @return 路径地址
     */
    public static String genderPath(FileType fileType) {
        fileType = fileTypeInit(fileType);
        return genderPath(fileType.getPath());
    }

    /**
     * 文件类型初始化
     *
     * @param fileType 文件类型
     * @return 初始化后
     */
    public static FileType fileTypeInit(FileType fileType) {
        if (fileType == null) {
            fileType = FileType.OTHER;
        }
        return fileType;
    }

    private static String getDirPath() {
        return LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
    }

    // 生成文件名
    public static String getName() {
        Integer code;
        while (true) {
            String blogCodeStr = UUID.randomUUID().toString().replace("-", "").replaceAll("[a-zA-Z]", "");
            if ("".equals(blogCodeStr) || blogCodeStr.length() < CUTLENGTH) {
                continue;
            }
            if (blogCodeStr.length() > CUTLENGTH) {
                blogCodeStr = blogCodeStr.substring(0, CUTLENGTH);
            }
            code = Integer.valueOf(blogCodeStr);
            if (code.toString().length() == CUTLENGTH) {
                break;
            }
        }
        return String.valueOf(System.currentTimeMillis()) + code;
    }

}
